﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace RecursosHumanos
{
    public partial class frmFilme_ : Form
    {
        Request request;

        WBGEntities bd = new WBGEntities();
        public Filme filme;

        private FilmeCartaz filmeCartaz;
        private byte[] cartaz;

        string caminhoNomeArquivoSelecionado = null;

        public frmFilme_(Request req)
        {
            request = req;
            InitializeComponent();
        }

        private void frmPessoa_Load(object sender, EventArgs e)
        {
            cbbClasEtaria.DataSource = frmMenu.constantes.FilmeClassificacoes;
            cbbClasEtaria.DisplayMember = "nome";

            cbbGenero.DataSource = frmMenu.constantes.FilmeGeneros;
            cbbGenero.DisplayMember = "nome";

            if (request == Request.Inserir)
            {
                PreparaInsert();
            }
            else
            {
                CarregaCampos();
            }
        }

        private void PreparaInsert()
        {
            if (filme == null)
                filme = new Filme();

            txtValor.Text = "0,00"; 
            cbLancamento.Checked = true;            
        }

        private void CarregaCampos()
        {
            txtID.Text = filme.idFilme.ToString();
            txtNome.Text = filme.nome;
            txtNomeOriginal.Text = filme.nomeOriginal;
            txtValor.Text = filme.valor.Value.ToString();
            cbLancamento.Checked = filme.lancamento;

            cbbClasEtaria.SelectedItem = frmMenu.constantes.FilmeClassificacoes.Find(x => x.id == filme.clasEtaria);
            cbbGenero.SelectedItem = frmMenu.constantes.FilmeGeneros.Find(x => x.id == filme.genero);

            CarregaCopias();
            
            filmeCartaz = bd.FilmeCartaz.FirstOrDefault(x => x.idFilme == filme.idFilme);
            if (filmeCartaz != null)
                Imagem.CarregaImagem(filmeCartaz.imagem, picImagem);
        }

        private void CarregaRegistro()
        {
            try
            {
 	            //locacao.idLocacao = txtIDLocacao.Text;
                filme.nome = txtNome.Text;
                filme.nomeOriginal = txtNomeOriginal.Text;
                filme.valor = Convert.ToDecimal(txtValor.Text);
                filme.genero = (cbbGenero.SelectedItem as FilmeGenero).id;
                filme.clasEtaria = (cbbClasEtaria.SelectedItem as FilmeClassificacao).id;
                filme.lancamento = cbLancamento.Checked;
            }
            catch
            {
                throw new Exception("Há dados inválidos.");
            }
        }

        private void frmLocacao__KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F5)
            {
                try
                {
                    CarregaRegistro();
                    if (request == Request.Inserir)
                    {
                        bd.Filme.AddObject(filme);
                    }
                    else
                    {

                    }

                    if (filmeCartaz == null && caminhoNomeArquivoSelecionado != null)
                    {
                        bd.FilmeCartaz.AddObject(new FilmeCartaz() { idFilme = filme.idFilme, imagem = cartaz });
                    }
                    else if (filmeCartaz != null && caminhoNomeArquivoSelecionado == "")
                    {
                        bd.DeleteObject(bd.FilmeCartaz.FirstOrDefault(x => x.idFilme == filme.idFilme));
                    }
                    bd.SaveChanges();
                    MessageBox.Show("Registro gravado com sucesso.", "Concluído", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    
                    this.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.InnerException.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            //caminhoNomeArquivoSelecionado = null;
            var ofd = new OpenFileDialog();
            ofd.Filter = "All Images Files|*.BMP;*.JPG;*.GIF;*.PNG;*.TIFF|GIF Files (*.gif)|*.gif|JPG Files (*.jpg)|*.jpg|PNG Files (*.png)|*.png";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                //if (caminhoNomeArquivoSelecionado.ToLower().EndsWith(".gif") || caminhoNomeArquivoSelecionado.ToLower().EndsWith(".jpg"))
                //{
                caminhoNomeArquivoSelecionado = ofd.FileName;
                picImagem.Image = new Bitmap(caminhoNomeArquivoSelecionado);
                cartaz = Imagem.CarregaImagemDoArquivo(ofd.FileName);
                //}
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Deseja realmente excluir a imagem deste filme?","Atenção",MessageBoxButtons.YesNo,MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
            {
                caminhoNomeArquivoSelecionado = "";
                picImagem.Image = null;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                WBGModel.ModelFilmeCopia copia = new WBGModel.ModelFilmeCopia();
                copia.idFilme = int.Parse(txtID.Text);
                copia.disponivel = false;
                new WBGDal.DalFilmeCopia().Inserir(copia);
                CarregaCopias();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problemas ao inserir uma nova cópia do filme.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void CarregaCopias()
        {
            try
            {
                //grdLocados.DataSource = from x in bd.FilmeCopia
                //                        where x.Filme.idFilme == filme.idFilme
                //                        select new { Cópia = x.idCopia, Disponível = x.disponivel };

                grdLocados.DataSource = new WBGDal.DalFilmeCopia().Listar("idFilme = " + filme.idFilme);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problemas ao carregaras cópias do filme.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                if (MessageBox.Show("Deseja realmente excluir?", "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.No)
                    return;

                new WBGDal.DalFilmeCopia().Deletar(int.Parse(grdLocados.CurrentRow.Cells[0].Value.ToString()));
                CarregaCopias();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problemas ao excluir a cópia selecionada.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
